#!/usr/bin/env python
# -*- coding: utf-8 -*-


# 1.列举你了解的字典中的功能（字典独有）。
'''
keys 键
values 值
items 键值对
get 查找键
'''
dict
# 2.列举你了解的集合中的功能（集合独有）。
'''
add 添加元素
discard 删除元素
update 批量添加元素
intersection 集合的交集
intersection intersection intersection intersection intersection
intersection intersection intersection intersection intersection
union 并集
difference 差集
symmetric_difference 对称差集
'''

# 3.列举你了解的可以转换为 布尔值且为False的值。
'''
0 int()
'' str()
[] list()
{} dict()
get()
'''

# 4.请用代码实现
# 循环提示用户输入，根据用户输入的值为键去字典中获取对应的值并输出。
'''
info = {'name': '王刚蛋', 'hobby': '铁锤'}
while True:
    val = input('请输入:')
    item = info.get(val)
    print(item)
    break
'''
# 循环提示用户输入，根据用户输入的值为键去字典中获取对应的值并输出（如果key不存在，则获取默认“键不存在”，并输出）。
# 注意：无需考虑循环终止（写死循环即可）
'''
info = {'name': '王刚蛋', 'hobby': '铁锤'}
while True:
    val = input('请输入键:')
    item = info.get(val,'键不存在')
    print(item)

'''

# 5.请用代码验证 "name" 是否在字典的键中？
'''
info = {'name': '王刚蛋', 'hobby': '铁锤', 'age': '18', 'f': '...100个键值对'}
item = info.get('name')
print(item)
'''

# 6.请用代码验证 "alex" 是否在字典的值中？
'''
info = {'name': '王刚蛋', 'hobby': '铁锤', 'age': '18', 'f': '...100个键值对'}
t = 'False'
if 'alex' in info.values():
    t = 'True'
print(t)
'''

# 7.有如下
# v1 = {'武沛齐','李杰','太白','景女神'}
# v2 = {'李杰','景女神'}
# 请得到 v1 和 v2 的交集并输出
'''
v1 = {'武沛齐', '李杰', '太白', '景女神'}
v2 = {'李杰', '景女神'}
item = v1.intersection(v2)
print(v2)
'''

# 请得到 v1 和 v2 的并集并输出
'''
v1 = {'武沛齐', '李杰', '太白', '景女神'}
v2 = {'李杰', '景女神'}
print(v1.union(v2))
'''

# 请得到 v1 和 v2 的 差集并输出
'''
v1 = {'武沛齐', '李杰', '太白', '景女神'}
v2 = {'李杰', '景女神'}
print(v1.difference(v2))
'''

# 请得到 v2 和 v1 的 差集并输出
'''
v1 = {'武沛齐', '李杰', '太白', '景女神'}
v2 = {'李杰', '景女神'}
print(v2.difference(v1))
'''

# 8.循环提示用户输入，并将输入内容追加到列表中（如果输入N或n则停止循环）
'''
ls = list()
while True:
    val = input('请随意输入，按N停止：')
    if val.upper() == 'N':
        break
    else:
        ls.append(val)
print(ls)
'''

# 9.循环提示用户输入，并将输入内容添加到集合中（如果输入N或n则停止循环）
'''
s = set()
while True:
    val = input('请随意输入，按N停止：')
    if val.upper() == 'N':
        break
    else:
        s.add(val)
print(s)
'''

# 10.写代码实现
# 循环提示用户输入，如果输入值在v1中存在，则追加到v2中，如果v1中不存在，则添加到v1中。（如果输入N或n则停止循环）
'''
v1 = {'alex', '武sir', '肖大'}
v2 = []
while True:
    val = input('请输入值,按N停止:')
    if val.upper() == 'N':
        break
    elif val in v1:
        v2.append(val)
    else:
        v1.add(val)
print(v1)
print(v2)
'''

# 11.判断以下值那个能做字典的key ？那个能做集合的元素？
'''
1 True
-1 True
"" True
None True
[1,2] False
(1,) True
{11,22,33,4} False
{'name':'wupeiq','age':18} False
'''

# 12.is 和 == 的区别？
'''
is 是对比内存地址是否相同
== 是对比数据是否相同
'''

# 13.type使用方式及作用？
'''
type() # 括号内可以添加数据并判断是int/str/list/dict/set/哪种数据类型。
'''

# 14.id的使用方式及作用？
'''
id()括号内可以添加数据，并查询数据所在内存的位置。
'''

# 15.看代码写结果并解释原因
# v1 = {'k1': 'v1', 'k2': [1, 2, 3]}
# v2 = {'k1': 'v1', 'k2': [1, 2, 3]}
#
# result1 = v1 == v2
# result2 = v1 is v2
# print(result1)
# print(result2)
'''
result1 是 True
result2 是 False
因为v1和v2的数据相同，但是他们的内存所在位置不同。
'''

# 16.看代码写结果并解释原因
# v1 = {'k1':'v1','k2':[1,2,3]}
# v2 = v1
#
# result1 = v1 == v2
# result2 = v1 is v2
# print(result1)
# print(result2)
'''
result1 是 True
result2 是 True
v1和v2的数据相同，内存地址也相同。因为他们v2数据的内存地址取自于v1的内存地址，所以他们的内存地址相同
'''

# 17.看代码写结果并解释原因
# v1 = {'k1':'v1','k2':[1,2,3]}
# v2 = v1
#
# v1['k1'] = 'wupeiqi'
# print(v2)
'''
{'k1': 'wupeiqi', 'k2': [1, 2, 3]}
因为v1是在原本数据的基础上进行修改，不是重新赋值，所以他们的数据和内存地址都相同。
'''

# 18.看代码写结果并解释原因
# v1 = '人生苦短，我用Python'
# v2 = [1,2,3,4,v1]
#
# v1 = "人生苦短，用毛线Python"
#
# print(v2)
'''
[1, 2, 3, 4, '人生苦短，我用Python']
因为v1是重新赋值。
'''

# 19.看代码写结果并解释原因
# info = [1,2,3]
# userinfo = {'account':info, 'num':info, 'money':info}

# info.append(9)
# print(userinfo)
'''
{'account': [1, 2, 3, 9], 'num': [1, 2, 3, 9], 'money': [1, 2, 3, 9]}
userinfo里的info根据info变化，因为info是修改。
'''
# info = "题怎么这么多"
# print(userinfo)
'''
userinfo里的info数据和现在的info数据不一样，因为info是重新赋值。
'''

# 20.看代码写结果并解释原因
# info = [1,2,3]
# userinfo = [info,info,info,info,info]
#
# info[0] = '不仅多，还特么难呢'
# print(info,userinfo)
'''
['不仅多，还特么难呢', 2, 3] [['不仅多，还特么难呢', 2, 3], ['不仅多，还特么难呢', 2, 3], ['不仅多，还特么难呢', 2, 3], ['不仅多，还特么难呢', 2, 3], ['不仅多，还特么难呢', 2, 3]]
因为是修改的列表内的元素，不是重新赋值，所以userinfo里的info根据info列表一起发生变化。
'''
# 21.看代码写结果并解释原因
# info = [1,2,3]
# userinfo = [info,info,info,info,info]
#
# userinfo[2][0] = '闭嘴'
# print(info,userinfo)
'''
['闭嘴', 2, 3] [['闭嘴', 2, 3], ['闭嘴', 2, 3], ['闭嘴', 2, 3], ['闭嘴', 2, 3], ['闭嘴', 2, 3]]
因为userinfo[2]的内存地址是info的内存地址，所以对列表内的数据做出更改其实是对info列表本身进行更改。
'''
# 22.看代码写结果并解释原因
# info = [1, 2, 3]
# user_list = []
# for item in range(10):
#     user_list.append(info)
#
# info[1] = "是谁说Python好学的？"
#
# print(user_list)
'''
[[1, '是谁说Python好学的？', 3], [1, '是谁说Python好学的？', 3], [1, '是谁说Python好学的？', 3], 
[1, '是谁说Python好学的？', 3], [1, '是谁说Python好学的？', 3], [1, '是谁说Python好学的？', 3], 
[1, '是谁说Python好学的？', 3], [1, '是谁说Python好学的？', 3], [1, '是谁说Python好学的？', 3], 
[1, '是谁说Python好学的？', 3]]
user_list和info同时发生改变，虽然info[1]是重新赋值，但赋值的是info里的一个元素，相当于对info列表进行了修改。
'''

# 23.看代码写结果并解释原因
# data = {}
# for item in range(10):
#     data['user'] = item
# print(data)
'''
{'user': 9}
因为每一次都是在更新date字典里的值。
'''

# 24.看代码写结果并解释原因
# data_list = []
# data = {}
# for item in range(10):
#     data['user'] = item
#     data_list.append(data)
# print(data_list)
'''
[{'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, 
{'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}]
因为data_list列表里的数据来自data，data['user'] = item一直在更新data里的数据，所以data_list里的data也在跟着变换。
'''

# 25.看代码写结果并解释原因
# data_list = []
# for item in range(10):
#     data = {}
#     data['user'] = item
#     data_list.append(data)
# print(data_list)
'''
[{'user': 0}, {'user': 1}, {'user': 2}, {'user': 3}, {'user': 4}, 
{'user': 5}, {'user': 6}, {'user': 7}, {'user': 8}, {'user': 9}]
因为data的数据每次循环都是在重新赋值一个空字典给data，所以data_list里的数据都不在同一个内存地址，
所以不能跟着data发生改变。
'''